package com.tbs.easyhomemoneyserver.service

import com.tbs.easyhomemoneyserver.DO.ApiLimit
import com.tbs.easyhomemoneyserver.DO.UserRightParamEntity
import com.tbs.easyhomemoneyserver.DO.UserRights
import com.tbs.easyhomemoneyserver.constants.CommonConstants
import com.tbs.easyhomemoneyserver.form.NewAPIRightForm
import com.tbs.easyhomemoneyserver.interfaces.IRightAuthorization
import com.tbs.easyhomemoneyserver.model.rights.ApiRequest
import com.tbs.easyhomemoneyserver.model.rights.ApiRightDTO
import com.tbs.easyhomemoneyserver.model.rights.UserRightTable

interface IApiLimitService {
    /**
     * 根据请求路径获取当前启用的需要的权限
     *
     * @param url
     * @return
     */
    fun getEnabledRights(url: String): ApiRightDTO

    /**
     * 获取用户拥有的权限
     *
     * @param userid 用户id
     * @return Map key表示roleType Set中是role,对应ApiLimit
     */
    fun findUserRights(userid: Long): UserRightTable


    /**
     * 新增权限
     *
     * @param limit
     */
    fun addNewRight(limit: NewAPIRightForm)


    /**
     * 复制现有的权限至新的url
     *
     * @param url 权限作用的url
     * @param id 现有的权限id
     */
    fun copyApiRightForURl(url: String, id: Long)


    /**
     *  查询权限
     *
     * @param limit
     * @return
     */
    fun findLimit(limit: ApiLimit): List<ApiLimit>

    /**
     * 根据ApiLimit获取权限验证的方法
     *
     * @param limit
     * @return
     */
    fun getAuthMethod(limit: ApiLimit): IRightAuthorization?

    /**
     * 获取当前系统中支持的权限验证方法名
     *
     * @return
     */
    fun RightAuthMethods(): List<String>

    /**
     * 根据权限类型获取全部的权限
     *
     * @param roleType 权限类型
     * @return
     */
    fun getAllLimitByRoleType(vararg roleType: Int): List<ApiLimit>

    /**
     * 给用户赋予权限
     *
     * @param limitIds 权限列表
     * @param userid 用户id
     * @param disable 是否禁用
     * @return
     */
    @Throws(Exception::class)
    fun applyUserRights(limitIds: List<Long>, userid: Long, disable: Int = CommonConstants.DISABLE): List<UserRights>

    /**
     * 为用户添加权限
     *
     * @param rights 权限数据
     * @param userid 用户id
     * @return
     */
    @Throws(Exception::class)
    fun insertRightForUser(rights: List<UserRights>, userid: Long): List<UserRights>


    /**
     * 获取用户权限参数
     *
     * @param userId 用户id
     * @return
     */
    fun getUserRightParam(userId: Long): List<UserRightParamEntity>


    /**
     * 改变用户当前登录使用的用户组
     *
     * @param groupId
     * @return
     */
    fun changeUserGroup(groupId: Long): ApiRequest?

    /**
     * 清空用户所有权限
     *
     * @param userId
     */
    fun deleteRights(userId: Long)

    /**
     * 移除对应权限的数据
     *
     * @param id
     */
    fun removeApiLimit(id: Long)
}
